大家好,我是大志。
在 AI Agent 开发中,MCP 已经成为调用外部系统的事实标准。因此,MCP 也成为 Agent 开发中的核心问题之一。在面试中,MCP 相关内容也成为高频考点。
面试官一般不仅会考察 MCP 是什么,还会继续追问 MCP 解决了哪些问题、与 LLM 的工具调用有什么区别等。我对这些与 MCP 相关的核心高频面试题进行了整理,将 MCP 的核心知识点串联起来。
另外,完整的 AI Agent 面试题文档也已经同步到了 aiflowline.cn,大家可以结合文章一起阅读。 大家好,我是大志。
在 AI Agent 开发中,MCP 已经成为调用外部系统的事实标准。因此,MCP 也成为 Agent 开发中的核心问题之一。在面试中,MCP 相关内容也成为高频考点。
面试官一般不仅会考察 MCP 是什么,还会继续追问 MCP 解决了哪些问题、与 LLM 的工具调用有什么区别等。我对这些与 MCP 相关的核心高频面试题进行了整理,将 MCP 的核心知识点串联起来。
另外,完整的 AI Agent 面试题文档也已经同步到了 aiflowline.cn,大家可以结合文章一起阅读。
1、什么是 MCP?
MCP(Model Context Protocol,模型上下文协议) 是由 Anthropic 提出的、面向 Agent 应用的开放协议。它的作用是标准化 Agent 应用与外部系统之间的调用方式。这里的外部系统可以是文件系统、数据库、业务服务等。
MCP 最主要的作用是让 Agent 应用以统一的方式调用外部系统,而无需每接入一个外部系统就编写一套适配逻辑。在 MCP 出现之前,一般通过 SDK 或 API 直接调用外部系统。
MCP 出现后,调用链路变为 Agent 通过 MCP Client 调用 MCP Server,再由 MCP Server 调用外部系统。MCP Server 将外部系统的调用包装成标准接口,MCP Client 负责发现和调用 MCP Server 提供的能力。这样,我们在 Agent 应用中就无需关心每个外部系统的调用细节,直接调用即可。
2、MCP 解决了什么问题?
MCP 主要解决的是 LLM 与外部工具之间缺少统一调用标准的问题。此外,MCP 还解决了以下问题:
- 工具可复用
在没有 MCP 时,我们在一个 Agent 项目中开发的工具,无法直接在其他 Agent 项目中使用。即使是自己开发的其他 Agent,也需要重写这个工具,导致同一个工具被重复开发。有了 MCP,所有 Agent 应用都可以复用同一个 MCP Server,做到一次开发,到处使用。
- 模型与工具解耦
在以往的 Agent 开发中,为 GPT 模型开发的工具,换成 Claude 模型后可能需要重新适配。有了 MCP,就可以实现模型与工具的解耦。
- 工具自动发现
之前,LLM 在绑定工具时必须手动指定:
tools = [
weather,
sql,
github,
email
]而有了 MCP 之后,MCP Client 可以自动发现这些工具,无需手动维护工具列表。
- 跨平台性
不同项目的编程语言和运行环境往往不完全相同。例如,一些业务系统使用 Java,而 Agent 应用使用 Python 构建。如果我们想在 Agent 中使用业务系统的能力,就可以让业务系统对外提供一个 MCP Server,供 Agent 应用调用。这样,其他 Agent 也可以直接接入该 MCP Server,无需重复开发。
3、MCP 和 Function Calling 有什么区别?
MCP 和 Function Calling 都与工具调用有关,但两者解决问题的层级不同。Function Calling 解决的是 LLM 如何调用工具函数,而 MCP 解决的是如何发现和调用外部工具。
Function Calling 是一种工具调用机制,而 MCP 则是一套开放协议。
Function Calling 本质上是大模型提供的一种能力,它的作用是让 LLM 决定是否调用工具函数,以及调用哪个工具、传入哪些参数。例如,用户提问“今天杭州天气如何?”,模型返回需要调用的工具函数和调用参数:
{
"tool": "get_weather",
"arguments": {
"city": "杭州"
}
}Agent 应用根据 LLM 返回的工具名称和参数调用指定工具,再将工具调用结果返回给 LLM,最终得出答案。
4、MCP 协议核心组件有哪些?
MCP 核心组件示意图如下:

MCP 的核心组件可分为通信方和对外暴露的能力两部分。通信方包括以下几个部分:
- Host
即 AI Agent 应用,例如 Claude Code、Cursor 和自研 Agent 应用。它的作用是管理 MCP Client。
- MCP Client
MCP 协议客户端,用于与 MCP Server 建立连接、获取其提供的能力,并将这些能力转换成工具,供 LLM 调用。
- MCP Server
MCP 服务端,是真正提供外部资源调用能力的一方,例如文件系统 MCP Server、GitHub MCP Server 等。
对外暴露的能力包括以下几个部分:
- Tools
提供给 AI Agent 调用的函数能力,例如查询天气、发送邮件等。MCP 会描述工具的名称、功能、输入参数 Schema 和返回结果格式等信息,类似于 LangChain 中的 Tool。经过 MCP 协议标准化后,这些工具可以被不同的 Agent 共享。
- Resources
提供 LLM 可以读取的上下文信息,例如本地文件、知识库、API 文档、配置文件等。
- Prompts
提供给 LLM 的、标准且可复用的 Prompt 模板,例如代码审查提示词模板、周报总结提示词模板等。Agent 应用可以动态获取这些模板,多个 Agent 也可以方便地共享同一套模板。
除此之外,MCP 使用 JSON-RPC 进行通信,标准传输方式主要包括 stdio 和 Streamable HTTP。stdio 适用于本地 MCP Server,Streamable HTTP 适用于远程服务。
5、MCP 如何发现工具?
使用 MCP 工具时,无需像 LangChain 中那样将所有工具写死在工具列表中。MCP 通过 tools/list 接口实现工具发现。MCP Client 会向 MCP Server 发起请求,查询所有可用工具,并获取每个工具的名称、描述和参数 Schema。
MCP 的工具发现流程分为以下几个步骤:
- MCP Server 注册工具
首先将工具注册到 MCP Server:
@mcp.tool
def query_sql(sql: str):
...- MCP Client 请求工具列表
当 MCP Client 与 MCP Server 建立连接后,MCP Client 通过 tools/list 接口请求 MCP Server 中工具的元数据信息。
- 将 MCP 的工具列表转换成 LLM 能识别的工具列表
MCP Server 返回的工具列表可能是:
{
"name": "query_sql",
"description": "执行 SQL 查询"
}再将工具列表转换为当前模型支持的工具列表结构,例如:
{
"type": "function",
"function": {
"name": "query_sql",
"description": "执行 SQL 查询",
"parameters": {
...
}
}
}- 将工具信息传递给 LLM
LLM 收到这些 MCP 工具信息后,会根据用户的问题决定是否调用工具。如果需要调用,则会根据工具描述返回工具调用信息。
以上就是 MCP 的工具发现流程。工具发现的主要作用体现在以下几个方面:
MCP Server新增工具后,MCP Client无需修改代码就可以动态发现。- 工具的描述信息和参数
Schema都由MCP Server统一维护。 - 不同的
Agent可以复用同一个MCP Server。 Agent应用的代码不需要随着工具的变化而变化。
6、MCP 如何调用工具?
上一个问题介绍了 MCP 如何完成工具发现,以及 LLM 如何通过 Function Calling 决定调用哪个工具。接下来,Agent 应用会将 LLM 返回的工具调用信息交给 MCP Client。
{
"name": "query_sql",
"arguments": {
...
}
}MCP Client 会将调用信息转换为 JSON-RPC 请求,并通过 tools/call 接口发起调用:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "query_sql",
"arguments": {
"sql": "SELECT * FROM orders WHERE id = 1001"
}
}
}MCP Server 执行工具并返回执行结果。最后,MCP Client 将调用结果交给 LLM,由 LLM 生成最终答案。
7、为什么 MCP 叫 Model Context Protocol,而不是 Tool Protocol?
因为 MCP 不仅提供 Tools,还提供 Resources 和 Prompts,Tools 只是其中一种能力。
- Prompts
MCP Server 可以暴露一些 Prompt 模板,MCP Client 可以通过 prompts/list 接口获取这些模板。
比如:
你是一名专业客服。
回答要求:
1. 语气友好
2. 不承诺无法实现的事情
3. 涉及退款时必须参考退款政策Agent 应用获取到提示词后,可以将其放入系统提示词中。
- Resources
MCP Server 可以提供一些 Resources,例如产品使用手册、退货文档等。MCP Client 通过 resources/list 接口发现资源,再通过 resources/read 接口读取具体资源,最终将读取到的文档放入上下文中。
8、如何开发一个 MCP Server?
开发 MCP Server,本质上就是将已有的系统能力包装成支持 MCP 协议的通用能力。
下面以使用 MCP SDK 开发服务端、使用 LangChain 接入客户端为例,介绍基本流程:
- 安装
MCP SDK和LangChain的MCP适配器
uv add mcp langchain-mcp-adapters- 创建 MCP Server
首先创建 MCP Server,并定义一个天气查询工具。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("weather-server")
@mcp.tool()
def get_weather(city: str) -> str:
"""查询指定城市的天气。
Args:
city: 城市名称。
"""
return f"{city}今天晴,气温 22°C 至 29°C。"
if __name__ == "__main__":
mcp.run(transport="stdio")- 创建 MCP Client
接下来构建 MCP Client。由于 MCP Client 和 MCP Server 之间使用 stdio 通信模式,因此不需要提前启动 MCP Server。MultiServerMCPClient 会根据指定的 SERVER_FILE 自动启动 MCP Server,并将 MCP Tool 转换为 LangChain Tool。MCP Client 调用完成后,MCP Server 也会随之关闭。
import asyncio
import sys
from pathlib import Path
import dotenv
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
SERVER_FILE = Path(__file__).with_name("13.1 MCP Server.py")
async def main() -> None:
dotenv.load_dotenv()
# MultiServerMCPClient 会按配置启动 MCP Server,并将 MCP 工具转换为 LangChain 工具。
client = MultiServerMCPClient(
{
"weather": {
"transport": "stdio",
"command": sys.executable,
"args": [str(SERVER_FILE)],
}
}
)
tools = await client.get_tools()
agent = create_agent(
model="deepseek-v4-flash",
tools=tools,
system_prompt="你是一个天气助手,只能使用天气工具回答天气问题。",
)
result = await agent.ainvoke(
{"messages": [{"role": "user", "content": "请查询杭州今天的天气"}]}
)
print(result["messages"][-1].content)
if __name__ == "__main__":
asyncio.run(main())执行结果如下:

9、MCP 相比传统 API 有什么优势?
MCP 相比传统 API 更适合 AI Agent。传统 API 主要供应用程序调用。如果想让 Agent 调用这些 API,需要将它们包装成工具,并补充参数 Schema、描述信息和权限控制等内容。而 MCP 将这些内容标准化,接入后即可使用。
MCP 相对于传统 API 有如下优势:
- 自动发现:
MCP Client可以自动发现MCP Server提供的工具,无需手写工具列表。 - 工具可复用:同一个
MCP Server可以被不同的Agent使用,无需重复接入。 - 更适合模型使用:
MCP工具自带名称、描述和参数等信息,让LLM可以方便地使用MCP提供的工具。 - 提供统一的上下文:除了工具外,
MCP还支持统一的提示词和资源。 - 集中权限控制:
MCP Server暴露工具后,可以集中进行权限控制、限流等操作。
MCP 降低了 Agent 接入外部系统的成本,让 LLM 能够更灵活地发现、了解和使用外部工具。
本期 MCP 相关面试题 就到这里。后面我会 每周至少更新 1 期面试题系列,想看后续 AI Agent 进阶面试题 的朋友,欢迎关注「大志说编程」!
觉得有用的话,转发给正在面试的小伙伴,咱们下期见~
1、什么是 MCP?
MCP(Model Context Protocol,模型上下文协议) 是由 Anthropic 提出的、面向 Agent 应用的开放协议。它的作用是标准化 Agent 应用与外部系统之间的调用方式。这里的外部系统可以是文件系统、数据库、业务服务等。
MCP 最主要的作用是让 Agent 应用以统一的方式调用外部系统,而无需每接入一个外部系统就编写一套适配逻辑。在 MCP 出现之前,一般通过 SDK 或 API 直接调用外部系统。
MCP 出现后,调用链路变为 Agent 通过 MCP Client 调用 MCP Server,再由 MCP Server 调用外部系统。MCP Server 将外部系统的调用包装成标准接口,MCP Client 负责发现和调用 MCP Server 提供的能力。这样,我们在 Agent 应用中就无需关心每个外部系统的调用细节,直接调用即可。
2、MCP 解决了什么问题?
MCP 主要解决的是 LLM 与外部工具之间缺少统一调用标准的问题。此外,MCP 还解决了以下问题:
- 工具可复用
在没有 MCP 时,我们在一个 Agent 项目中开发的工具,无法直接在其他 Agent 项目中使用。即使是自己开发的其他 Agent,也需要重写这个工具,导致同一个工具被重复开发。有了 MCP,所有 Agent 应用都可以复用同一个 MCP Server,做到一次开发,到处使用。
- 模型与工具解耦
在以往的 Agent 开发中,为 GPT 模型开发的工具,换成 Claude 模型后可能需要重新适配。有了 MCP,就可以实现模型与工具的解耦。
- 工具自动发现
之前,LLM 在绑定工具时必须手动指定:
tools = [
weather,
sql,
github,
email
]而有了 MCP 之后,MCP Client 可以自动发现这些工具,无需手动维护工具列表。
- 跨平台性
不同项目的编程语言和运行环境往往不完全相同。例如,一些业务系统使用 Java,而 Agent 应用使用 Python 构建。如果我们想在 Agent 中使用业务系统的能力,就可以让业务系统对外提供一个 MCP Server,供 Agent 应用调用。这样,其他 Agent 也可以直接接入该 MCP Server,无需重复开发。
3、MCP 和 Function Calling 有什么区别?
MCP 和 Function Calling 都与工具调用有关,但两者解决问题的层级不同。Function Calling 解决的是 LLM 如何调用工具函数,而 MCP 解决的是如何发现和调用外部工具。
Function Calling 是一种工具调用机制,而 MCP 则是一套开放协议。
Function Calling 本质上是大模型提供的一种能力,它的作用是让 LLM 决定是否调用工具函数,以及调用哪个工具、传入哪些参数。例如,用户提问“今天杭州天气如何?”,模型返回需要调用的工具函数和调用参数:
{
"tool": "get_weather",
"arguments": {
"city": "杭州"
}
}Agent 应用根据 LLM 返回的工具名称和参数调用指定工具,再将工具调用结果返回给 LLM,最终得出答案。
4、MCP 协议核心组件有哪些?
MCP 核心组件示意图如下:

MCP 的核心组件可分为通信方和对外暴露的能力两部分。通信方包括以下几个部分:
- Host
即 AI Agent 应用,例如 Claude Code、Cursor 和自研 Agent 应用。它的作用是管理 MCP Client。
- MCP Client
MCP 协议客户端,用于与 MCP Server 建立连接、获取其提供的能力,并将这些能力转换成工具,供 LLM 调用。
- MCP Server
MCP 服务端,是真正提供外部资源调用能力的一方,例如文件系统 MCP Server、GitHub MCP Server 等。
对外暴露的能力包括以下几个部分:
- Tools
提供给 AI Agent 调用的函数能力,例如查询天气、发送邮件等。MCP 会描述工具的名称、功能、输入参数 Schema 和返回结果格式等信息,类似于 LangChain 中的 Tool。经过 MCP 协议标准化后,这些工具可以被不同的 Agent 共享。
- Resources
提供 LLM 可以读取的上下文信息,例如本地文件、知识库、API 文档、配置文件等。
- Prompts
提供给 LLM 的、标准且可复用的 Prompt 模板,例如代码审查提示词模板、周报总结提示词模板等。Agent 应用可以动态获取这些模板,多个 Agent 也可以方便地共享同一套模板。
除此之外,MCP 使用 JSON-RPC 进行通信,标准传输方式主要包括 stdio 和 Streamable HTTP。stdio 适用于本地 MCP Server,Streamable HTTP 适用于远程服务。
5、MCP 如何发现工具?
使用 MCP 工具时,无需像 LangChain 中那样将所有工具写死在工具列表中。MCP 通过 tools/list 接口实现工具发现。MCP Client 会向 MCP Server 发起请求,查询所有可用工具,并获取每个工具的名称、描述和参数 Schema。
MCP 的工具发现流程分为以下几个步骤:
- MCP Server 注册工具
首先将工具注册到 MCP Server:
@mcp.tool
def query_sql(sql: str):
...- MCP Client 请求工具列表
当 MCP Client 与 MCP Server 建立连接后,MCP Client 通过 tools/list 接口请求 MCP Server 中工具的元数据信息。
- 将 MCP 的工具列表转换成 LLM 能识别的工具列表
MCP Server 返回的工具列表可能是:
{
"name": "query_sql",
"description": "执行 SQL 查询"
}再将工具列表转换为当前模型支持的工具列表结构,例如:
{
"type": "function",
"function": {
"name": "query_sql",
"description": "执行 SQL 查询",
"parameters": {
...
}
}
}- 将工具信息传递给 LLM
LLM 收到这些 MCP 工具信息后,会根据用户的问题决定是否调用工具。如果需要调用,则会根据工具描述返回工具调用信息。
以上就是 MCP 的工具发现流程。工具发现的主要作用体现在以下几个方面:
MCP Server新增工具后,MCP Client无需修改代码就可以动态发现。- 工具的描述信息和参数
Schema都由MCP Server统一维护。 - 不同的
Agent可以复用同一个MCP Server。 Agent应用的代码不需要随着工具的变化而变化。
6、MCP 如何调用工具?
上一个问题介绍了 MCP 如何完成工具发现,以及 LLM 如何通过 Function Calling 决定调用哪个工具。接下来,Agent 应用会将 LLM 返回的工具调用信息交给 MCP Client。
{
"name": "query_sql",
"arguments": {
...
}
}MCP Client 会将调用信息转换为 JSON-RPC 请求,并通过 tools/call 接口发起调用:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "query_sql",
"arguments": {
"sql": "SELECT * FROM orders WHERE id = 1001"
}
}
}MCP Server 执行工具并返回执行结果。最后,MCP Client 将调用结果交给 LLM,由 LLM 生成最终答案。
7、为什么 MCP 叫 Model Context Protocol,而不是 Tool Protocol?
因为 MCP 不仅提供 Tools,还提供 Resources 和 Prompts,Tools 只是其中一种能力。
- Prompts
MCP Server 可以暴露一些 Prompt 模板,MCP Client 可以通过 prompts/list 接口获取这些模板。
比如:
你是一名专业客服。
回答要求:
1. 语气友好
2. 不承诺无法实现的事情
3. 涉及退款时必须参考退款政策Agent 应用获取到提示词后,可以将其放入系统提示词中。
- Resources
MCP Server 可以提供一些 Resources,例如产品使用手册、退货文档等。MCP Client 通过 resources/list 接口发现资源,再通过 resources/read 接口读取具体资源,最终将读取到的文档放入上下文中。
8、如何开发一个 MCP Server?
开发 MCP Server,本质上就是将已有的系统能力包装成支持 MCP 协议的通用能力。
下面以使用 MCP SDK 开发服务端、使用 LangChain 接入客户端为例,介绍基本流程:
- 安装
MCP SDK和LangChain的MCP适配器
uv add mcp langchain-mcp-adapters- 创建 MCP Server
首先创建 MCP Server,并定义一个天气查询工具。
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("weather-server")
@mcp.tool()
def get_weather(city: str) -> str:
"""查询指定城市的天气。
Args:
city: 城市名称。
"""
return f"{city}今天晴,气温 22°C 至 29°C。"
if __name__ == "__main__":
mcp.run(transport="stdio")- 创建 MCP Client
接下来构建 MCP Client。由于 MCP Client 和 MCP Server 之间使用 stdio 通信模式,因此不需要提前启动 MCP Server。MultiServerMCPClient 会根据指定的 SERVER_FILE 自动启动 MCP Server,并将 MCP Tool 转换为 LangChain Tool。MCP Client 调用完成后,MCP Server 也会随之关闭。
import asyncio
import sys
from pathlib import Path
import dotenv
from langchain.agents import create_agent
from langchain_mcp_adapters.client import MultiServerMCPClient
SERVER_FILE = Path(__file__).with_name("13.1 MCP Server.py")
async def main() -> None:
dotenv.load_dotenv()
# MultiServerMCPClient 会按配置启动 MCP Server,并将 MCP 工具转换为 LangChain 工具。
client = MultiServerMCPClient(
{
"weather": {
"transport": "stdio",
"command": sys.executable,
"args": [str(SERVER_FILE)],
}
}
)
tools = await client.get_tools()
agent = create_agent(
model="deepseek-v4-flash",
tools=tools,
system_prompt="你是一个天气助手,只能使用天气工具回答天气问题。",
)
result = await agent.ainvoke(
{"messages": [{"role": "user", "content": "请查询杭州今天的天气"}]}
)
print(result["messages"][-1].content)
if __name__ == "__main__":
asyncio.run(main())执行结果如下:

9、MCP 相比传统 API 有什么优势?
MCP 相比传统 API 更适合 AI Agent。传统 API 主要供应用程序调用。如果想让 Agent 调用这些 API,需要将它们包装成工具,并补充参数 Schema、描述信息和权限控制等内容。而 MCP 将这些内容标准化,接入后即可使用。
MCP 相对于传统 API 有如下优势:
- 自动发现:
MCP Client可以自动发现MCP Server提供的工具,无需手写工具列表。 - 工具可复用:同一个
MCP Server可以被不同的Agent使用,无需重复接入。 - 更适合模型使用:
MCP工具自带名称、描述和参数等信息,让LLM可以方便地使用MCP提供的工具。 - 提供统一的上下文:除了工具外,
MCP还支持统一的提示词和资源。 - 集中权限控制:
MCP Server暴露工具后,可以集中进行权限控制、限流等操作。
MCP 降低了 Agent 接入外部系统的成本,让 LLM 能够更灵活地发现、了解和使用外部工具。
本期 MCP 相关面试题 就到这里。后面我会 每周至少更新 1 期面试题系列,想看后续 AI Agent 进阶面试题 的朋友,欢迎关注「大志说编程」!
觉得有用的话,转发给正在面试的小伙伴,咱们下期见~